import { ENUM_UI_TYPE } from '../Enum';
import MenuLayer from '../layer/MenuLayer';
import DataManager from '../manager/DataManager';
import { StaticInstance } from '../StaticInstance';
import bh_toast from './bh_toast';
import { privacyChannel } from './privacyChannel';
import { privacyChannelWeb } from './privacyChannelWeb';

export class privacyChannelKSinner extends privacyChannelWeb {


    paraMap: Map<String, string> = new Map([
        // ['bannerId', '1951169'],
        //['interId', '2300015808_02'],
        ['videoId', '2300017035_01'],
        // ['htId', '1951116'],
        ['ctrlId', '677f7529c8946b1700d956c2'],
        // ['gid', '674546ecc5b6582182fb7e6a'],
    ]);

    channelObj: any = (window as any).ks
    ruanzhu: string = '著作权人:南京天豆互动网络科技有限公司\n登记号:2022SR1141191';
    companyName: string = '南京天豆互动网络科技有限公司';
    gameName: string = '2048硬核版';
    exit(): void {
        this.channelObj.exitApplication();
    }

    getSysInfo() {
        if (!this.sysInfo && cc.sys.DESKTOP_BROWSER != cc.sys.platform) {
            this.sysInfo = this.channelObj.getSystemInfoSync();
        }
        return this.sysInfo;
    }
    init() {

        const me = this;
        // 
        const ctrlId = me.getPara('ctrlId');
        console.error("===> init: ctrlId: ", ctrlId);
        if (ctrlId) {

            // try {
            //     let query = me.channelObj.getLaunchOptionsSync().query;
            //     console.error("启动参数展示: ", JSON.stringify(query))
            //     if (query && query.path && query.path.indexof("key=fromid") >= 0) {
            //         console.error("买量用户");
            //         this.isBuyUser = true;
            //     } else {
            //         console.error("不是买量用户");
            //     }
            // }
            // catch (e) {
            //     console.error("买量环境错误", JSON.stringify(e))
            // }

            let sid = localStorage.getItem('sid');
            // if (!sid && me.channelObj && me.channelObj.getLaunchOptionsSync) {
            //     const lObj = me.channelObj.getLaunchOptionsSync();
            //     if (lObj && lObj.scene) {
            //         sid = lObj.scene;
            //         localStorage.setItem('__sid', sid);
            //     }
            // }
            try {
                if (!sid) {
                    sid = me.channelObj.getLaunchOptionsSync().from;
                    if (sid == 'game_center' || sid == 'search') {

                        localStorage.setItem('sid', sid);
                    }
                }
            } catch {
                console.error("是web")
            }

            console.error("sid", sid)
            const reqData = { "id": ctrlId, sid }
            console.error("请求数据: jpost ");
            //const reqData = { 'id': ctrlId, sid };
            privacyChannel.jpost('https://ga.gametdd.com/adCtrl/agd/conf', reqData, (err, re) => {
                if (err) {
                    console.error("错误: ", err);
                    return;
                }
                if ('' + re.code !== '0') {
                    console.error('返回值错误:' + JSON.stringify(re));
                    return;
                }
                me.ctrl = re.data;
                console.error('====>返回', me.ctrl);
            });
        }
    }
    addShortcut() {
        try {
            this.channelObj.addShortcut({
                success() {
                    console.log("添加桌面成功");
                    DataManager.instance.power += 5
                    DataManager.instance.save()
                    cc.sys.localStorage.setItem("desktop", 1)
                    cc.director.getScene().getChildByName('Canvas').getChildByName("UI").getChildByName("DesktopLayer").destroy()
                    cc.resources.load("privacy/bh_toast", cc.Prefab, (error, prefab: cc.Prefab) => {
                        if (error) {
                            console.error(error);
                            return;
                        }
                        let node = cc.instantiate(prefab);

                        cc.director.getScene().getChildByName('Canvas').getChildByName("UI").getComponent(MenuLayer).rendorPower()
                        node.getComponent(bh_toast).show("获得：体力x5",
                            cc.director.getScene().getChildByName('Canvas').getChildByName("UI"))

                    })
                },
                fail(err) {
                    if (err.code === -10005) {
                        console.log("暂不支持该功能");

                    } else {
                        console.log("添加桌面失败", err.msg);
                    }
                },
            });
        } catch {
            console.error("不是ks平台")

        }

    }
    //来自于侧边栏吗
    isComeFromSliderBar() {
        try {
            let sid = this.channelObj.getLaunchOptionsSync().from
            if (sid == "sidebar_new") {
                return true
            } else {
                return false
            }
        }
        catch {

            return false
        }
    }
    //可以领取奖励吗
    isRewarded() {
        if (this.isComeFromSliderBar() && !localStorage.getItem('reciveRewardDate')) {
            console.error("第一次领取")
            return true
        }
        if (this.isComeFromSliderBar() && this.isNewDay(Number(localStorage.getItem('reciveRewardDate')))) {
            console.error("新的一天")
            return true
        } else {
            return false
        }
    }
    reciveReward() {
        localStorage.setItem('reciveRewardDate', Date.now().toString());
    }
    isNewDay(timeA: number): boolean {
        if (timeA <= 0) {
            return true;
        }
        const d1 = new Date(timeA);
        const d2 = new Date();
        if (d1.getFullYear() === d2.getFullYear() && d1.getMonth() === d2.getMonth() && d1.getDate() === d2.getDate()) {
            return false;
        }
        return true;
    }
    //侧边栏有效吗
    checkSliderBarIsAvailable(a) {

        this.channelObj.checkSliderBarIsAvailable({
            success: (result) => {
                console.error(
                    "侧边栏调用成功: " + JSON.stringify(result));
                a && a(result.available)
            },
            fail: (result) => {
                console.error(
                    "侧边栏调用失败: " + JSON.stringify(result));
                a && a(false)
            },
        })

    }
    reciveLoginReward() {
        localStorage.setItem('reciveLoginRewardDate', Date.now().toString());
    }
    isLoginReWard() {
        if (!localStorage.getItem('reciveLoginRewardDate') || this.isNewDay(Number(localStorage.getItem('reciveLoginRewardDate')))) {
            console.error("新的一天")
            return true
        } else {
            return false
        }
    }
    addCommonUse() {
        this.channelObj.addCommonUse({
            success() {
                cc.sys.localStorage.setItem("commonReward", 1)
                cc.find("Canvas/UI/MenuLayer/siderBar").removeFromParent()
                DataManager.instance.power += 5
                DataManager.instance.save()
                cc.resources.load("privacy/bh_toast", cc.Prefab, (error, prefab: cc.Prefab) => {
                    if (error) {
                        console.error(error);
                        return;
                    }
                    let node = cc.instantiate(prefab);

                    cc.director.getScene().getChildByName('Canvas').getChildByName("UI").getComponent(MenuLayer).rendorPower()
                    node.getComponent(bh_toast).show("获得：体力x5",
                        cc.director.getScene().getChildByName('Canvas').getChildByName("UI"))

                })
                console.log("设为常用成功");
            },
            fail(err) {
                if (err.code === -10005) {
                    console.log("暂不支持该功能");
                } else {
                    console.log("设为常用失败", err.msg);
                }
            },
        });
    }
    showVideo(succ) {
        const id = this.getPara('videoId');
        if (!id) {
            return;
        }

        console.error('====>showVideo ks1');
        try {
            cc.game.pause();

            const rewardedAd = window['ks'].createRewardedVideoAd({
                adUnitId: id,
            });
            rewardedAd.onError(err => {
                console.log("激励视频广告加载失败", err);
                cc.game.resume();
                privacyChannel.toast('暂无广告');
            });
            // rewardedAd.onLoad(function (res) {
            //     console.log('激励视频广告加载完成-onload触发', JSON.stringify(res));
            //     rewardedAd.show().then(() => {
            //         console.log('激励视频广告展示完成');
            //     }).catch((err) => {
            //         console.log('激励视频广告展示失败', JSON.stringify(err));
            //         cc.game.resume();
            //         privacyChannel.toast('暂无广告');
            //     })
            // })

            rewardedAd.onClose((res) => {
                cc.game.resume();
                console.log('视频广告关闭回调')
                if (res && res.isEnded) {
                    console.log("正常播放结束，可以下发游戏奖励");
                    succ();
                } else {
                    console.log("播放中途退出，不下发游戏奖励");
                }
            });
            let p = rewardedAd.show()
            p.then(function (result) {
                // 激励视频展示成功
                console.log(`show rewarded video ad success, result is ${result}`)
            }).catch(function (error) {
                // 激励视频展示失败
                console.log(`show rewarded video ad failed, error is ${error}`)
            })



        } catch (e) {
            console.error('videoERR', e);
            cc.game.resume();
        }
    }

    showNoRewardVideo() {
        const id = this.getPara('videoId');
        if (!id) {
            return;
        }

        console.error('====>showVideo ks1');
        try {
            cc.game.pause();

            const rewardedAd = window['ks'].createRewardedVideoAd({
                adUnitId: id,
            });
            rewardedAd.onError(err => {
                console.log("激励视频广告加载失败", err);
                cc.game.resume();
                privacyChannel.toast('暂无广告');
            });
            // rewardedAd.onLoad(function (res) {
            //     console.log('激励视频广告加载完成-onload触发', JSON.stringify(res));
            //     rewardedAd.show().then(() => {
            //         console.log('激励视频广告展示完成');
            //     }).catch((err) => {
            //         console.log('激励视频广告展示失败', JSON.stringify(err));
            //         cc.game.resume();
            //         privacyChannel.toast('暂无广告');
            //     })
            // })

            rewardedAd.onClose((res) => {
                cc.game.resume();
                console.log('视频广告关闭回调')
                if (res && res.isEnded) {
                    console.log("正常播放结束，可以下发游戏奖励");
                    //succ();
                } else {
                    console.log("播放中途退出，不下发游戏奖励");
                }
            });
            let p = rewardedAd.show()
            p.then(function (result) {
                // 激励视频展示成功
                console.log(`show rewarded video ad success, result is ${result}`)
            }).catch(function (error) {
                // 激励视频展示失败
                console.log(`show rewarded video ad failed, error is ${error}`)
            })



        } catch (e) {
            console.error('videoERR', e);
            cc.game.resume();
        }
    }

    private insertAD: any = null;

    doShowInter(id: string, isBanner: boolean = false, style?: any) {
        // const height = (isBanner) ? cc.view.getVisibleSize().height / 2 + 230 : cc.view.getVisibleSize().height / 2 + 230;
        // const conf = {
        //     posId: id,
        //     style: {
        //         top: height,
        //     }
        // }
        // if (style) {
        //     conf.style = style;
        // }
        // if (this.insertAD) {
        //     //不能同时显示两个
        //     console.error('原生板正在显示，不能重复显示');
        //     return;
        // }
        // const me = this;
        // this.insertAD = me.channelObj.createCustomAd(conf);
        // me.insertAD.offHide();
        // me.insertAD.onHide(() => {
        //     console.error('原生板隐藏，删除原始板');
        //     me.insertAD.destroy();
        //     me.insertAD = null;
        //     // me.insertAD = me.channelObj.createCustomAd(conf);
        // });
        // me.insertAD.offClose()
        // me.insertAD.onClose(() => {
        //     console.error('原生板删除，删除原始板');
        //     me.insertAD.destroy();
        //     me.insertAD = null;
        // })
        // me.insertAD.offError();
        // me.insertAD.onError(err => {
        //     console.error('原生模板广告加载失败' + JSON.stringify(err));
        //     me.insertAD = null;
        // });
        // me.insertAD.show().then(() => {
        //     console.log('原生模板广告展示完成');
        // }).catch((err) => {
        //     console.log('原生模板广告展示失败' + JSON.stringify(err));
        //     me.insertAD = null;
        // });

        const interstitialAd = window['ks'].createInterstitialAd({
            adUnitId: id,
        });
        if (interstitialAd) {
            interstitialAd.onClose(res => {
                // 插屏广告关闭事件
            })
            interstitialAd.onError(res => {
                // 插屏广告Error事件
            })
            let p = interstitialAd.show()
            p.then(function (result) {
                // 插屏广告展示成功
                console.log(`show interstitial ad success, result is ${result}`)
            }).catch(function (error) {
                // 插屏广告展示失败
                console.log(`show interstitial ad failed, error is ${error}`, error.code, JSON.stringify(error))
                if (error.code === -10005) {
                    console.error("表明当前app版本不支持插屏广告，可以提醒用户升级app版本")
                }
            })
        } else {
            console.log("创建插屏广告组件失败");
        }
    }

    showInter(isBanner: boolean = false, style?: any) {
        const id = this.getPara('interId');
        if (!id) {
            return;
        }
        // 插屏广告弹出页面
        // 在所有二级页面概率弹出
        // 0为关闭，1为开启
        // if (!this.getCtrl('p1')) {
        //     return;
        // }
        //控制所有二级页面插屏弹出的概率,单位为百分比
        // if (Math.random() > this.getCtrl('p2') / 100) {
        //     return;
        // }
        console.error('====>showInter');

        //原生插屏延迟
        // const p3 = this.getCtrl('p3');
        const me = this;
        //setTimeout(() => {
        me.doShowInter(id, isBanner, style);
        //}, p3 * 1000);
    }

    showStyleInter(id: number) {
        console.error("===>showStyleInter");
        let style = {
            top: this.getSysInfo().windowHeight / 2 + 200
        };
        this.showInter(false, style);
    }


    closeInter() {

        console.error('====>closeInter');
        if (this.insertAD) {
            this.insertAD.hide();
        }
    }

    showBanner() {
        const id = this.getPara('bannerId');
        if (!id) {
            return;
        }
        console.error('====>showBanner');
        const bannerAd = this.channelObj.createBannerAd({ 'posId': id });
        bannerAd.onError(err => {
            console.log('banner广告加载失败' + JSON.stringify(err));
        });
        bannerAd.show().then(() => {
            console.log('banner广告展示完成');
        }).catch((err) => {
            console.log('banner广告展示失败' + JSON.stringify(err));
        });
        bannerAd.onHide(() => {
            console.log('banner广告隐藏');
        });
    }

    showHt() {

    }
}